package com.ioi.base;

import java.util.List;

/**
 * Page 通用分页对象
 *
 * @author LILIBO
 * @since 2024/4/25
 */
public class Page<T> {

    /**
     * 当前页码（当前是第几页）
     */
    private int pageNo = 1;

    /**
     * 每页大小（每页显示多少条数据）
     */
    private int pageSize = 10;

    /**
     * 总数据量（数据库中满足条件的数据一共有多少）
     */
    private int totalCount;

    /**
     * 总页数（通过总数据量和页大小计算出来）
     */
    private int totalPage;

    /**
     * 当前页的数据
     */
    private List<T> data;

    /**
     * 获取页起始位置
     *
     * @return
     */
    public int getPageIndex() {
        return (this.pageNo - 1) * this.pageSize;
    }

    /**
     * 获取页码
     *
     * @return
     */
    public int getPageNo() {
        return pageNo;
    }

    /**
     * 设置页码
     *
     * @param pageNo
     */
    public void setPageNo(int pageNo) {
        // 容错处理，如果小于等于0就设置为1，不能超过最大页大小
        this.pageNo = pageNo <= 0 ? 1 : Math.min(pageNo, this.totalPage);
    }

    /**
     * 获取页大小
     *
     * @return
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 设置页大小
     *
     * @param pageSize
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取总数据量
     *
     * @return
     */
    public int getTotalCount() {
        return totalCount;
    }

    /**
     * 设置总数据量
     *
     * @param totalCount
     */
    public void setTotalCount(int totalCount) {
        // 设置总数据量
        this.totalCount = totalCount;
        // 设置总页数（根据pageSize进行计算）
        this.totalPage = (this.totalCount % this.pageSize == 0) ? (this.totalCount / this.pageSize) : (this.totalCount / this.pageSize + 1);
    }

    /**
     * 获取总页数
     *
     * @return
     */
    public int getTotalPage() {
        return totalPage;
    }

    /**
     * 获取页数据
     *
     * @return
     */
    public List<T> getData() {
        return data;
    }

    /**
     * 设置页数据
     *
     * @param data
     */
    public void setData(List<T> data) {
        this.data = data;
    }

}
